package cn.hongwei.definition;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
 * @author Great
 * @email 1224028994@qq.com
 * 向容器加入BeanDefinition(bean的定义)
 * 有关spring中bean的定义的概念,大家可以自行百度.
 * 这种方式无需将自身加入IOC容器,但是要在配置类上使用@Import注解
 */
public class MyImportBeanDefinition implements ImportBeanDefinitionRegistrar {
    /**
     *
     * @param importingClassMetadata 可以获取到配置类上所有注解的信息
     * @param registry 向容器注册bean的定义的对象,其实是spring框架的核心工厂 DefaultListableBeanFactory
     */
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        //打印配置类上的所有注解信息
        //System.out.println(importingClassMetadata.getAnnotationTypes());
        //创建bean的定义
        AbstractBeanDefinition bd=new RootBeanDefinition();
        bd.setBeanClass(UserDao.class);
        bd.setScope("singleton");//单利
        bd.setLazyInit(false);//立即加载
        //这个bean在容器的id就是userDao 类型是UserDao类型
        registry.registerBeanDefinition("userDao",bd);
    }
}
